home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1998 August / PC Plus SuperCD 50a Issue 142 (CD142a) (August 1998).iso / trial / demon / TURNPIKE.1 / CLASSES.ZIP / MS / APPLET / AppletClassLoader.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-04-14  |  4.8 KB  |  205 lines

  1. package ms.applet;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.PrintStream;
  9. import java.net.URL;
  10. import java.net.URLConnection;
  11. import java.util.Hashtable;
  12. import sun.misc.MessageUtils;
  13.  
  14. class AppletClassLoader extends ClassLoader {
  15.    boolean verboseClassLoading = false;
  16.    Hashtable classes = new Hashtable();
  17.    URL base;
  18.    AppletViewer mAppletViewer;
  19.    String mUrlCacheFileName;
  20.  
  21.    AppletClassLoader(AppletViewer var1, URL var2) {
  22.       this.mAppletViewer = var1;
  23.       this.base = var2;
  24.    }
  25.  
  26.    private Class loadClass(URL var1) throws IOException {
  27.       Object var2 = null;
  28.  
  29.       try {
  30.          Class var22;
  31.          try {
  32.             int var5 = -1;
  33.  
  34.             try {
  35.                File var20 = this.mAppletViewer.getUrlCacheFile(var1);
  36.                this.mUrlCacheFileName = var20.getAbsolutePath();
  37.                var2 = new FileInputStream(var20);
  38.                var5 = (int)var20.length();
  39.             } catch (Exception var15) {
  40.                this.mUrlCacheFileName = null;
  41.                URLConnection var6 = var1.handler.openConnection(var1);
  42.                var6.setAllowUserInteraction(false);
  43.                var2 = var6.getInputStream();
  44.                var5 = var6.getContentLength();
  45.             }
  46.  
  47.             byte[] var21 = new byte[var5 == -1 ? 4096 : var5];
  48.             int var7 = 0;
  49.             Thread var9 = Thread.currentThread();
  50.  
  51.             int var8;
  52.             while((var8 = ((InputStream)var2).read(var21, var7, var21.length - var7)) >= 0 && !var9.isInterrupted()) {
  53.                if ((var7 += var8) == var21.length) {
  54.                   if (var5 >= 0) {
  55.                      break;
  56.                   }
  57.  
  58.                   byte[] var10 = new byte[var7 * 2];
  59.                   System.arraycopy(var21, 0, var10, 0, var7);
  60.                   var21 = var10;
  61.                }
  62.             }
  63.  
  64.             if (var9.isInterrupted()) {
  65.                throw new IOException("class loading interrupted: " + var1);
  66.             }
  67.  
  68.             this.mUrlCacheFileName = null;
  69.             if (!super.initialized) {
  70.                throw new SecurityException("Security Exception: ClassLoader object not initialized.");
  71.             }
  72.  
  73.             var22 = super.defineClass0(var21, 0, var7);
  74.          } finally {
  75.             this.mUrlCacheFileName = null;
  76.             if (var2 != null) {
  77.                ((InputStream)var2).close();
  78.             }
  79.  
  80.          }
  81.  
  82.          return var22;
  83.       } catch (IOException var17) {
  84.          this.mUrlCacheFileName = null;
  85.          ((Throwable)var17).printStackTrace();
  86.          throw var17;
  87.       } catch (Throwable var18) {
  88.          this.mUrlCacheFileName = null;
  89.          var18.printStackTrace();
  90.          throw new IOException("class not loaded: " + var1);
  91.       }
  92.    }
  93.  
  94.    public Class loadClass(String var1) throws ClassNotFoundException {
  95.       return this.loadClass(var1, true);
  96.    }
  97.  
  98.    protected Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
  99.       Class var3 = (Class)this.classes.get(var1);
  100.       if (var3 == null) {
  101.          SecurityManager var4 = System.security;
  102.          if (var4 != null) {
  103.             int var5 = var1.lastIndexOf(46, var1.count - 1);
  104.             if (var5 >= 0) {
  105.                var4.checkPackageAccess(var1.substring(0, var5));
  106.             }
  107.          }
  108.  
  109.          try {
  110.             if (!super.initialized) {
  111.                throw new SecurityException("Security Exception: ClassLoader object not initialized.");
  112.             }
  113.  
  114.             return super.findSystemClass0(var1);
  115.          } catch (Throwable var6) {
  116.             var3 = this.findClass(var1);
  117.          }
  118.       }
  119.  
  120.       if (var3 == null) {
  121.          throw new ClassNotFoundException(var1);
  122.       } else {
  123.          if (var2) {
  124.             if (!super.initialized) {
  125.                throw new SecurityException("Security Exception: ClassLoader object not initialized.");
  126.             }
  127.  
  128.             super.resolveClass0(var3);
  129.          }
  130.  
  131.          return var3;
  132.       }
  133.    }
  134.  
  135.    void errorMsg(String var1, String var2) {
  136.       PrintStream var10000 = System.err;
  137.       String var3 = "appletloader." + var1;
  138.       var10000.println(MessageUtils.subst(System.getProperty(var3), var2));
  139.    }
  140.  
  141.    void errorMsg(String var1, String var2, String var3) {
  142.       PrintStream var10000 = System.err;
  143.       String var4 = "appletloader." + var1;
  144.       var10000.println(MessageUtils.subst(System.getProperty(var4), var2, var3));
  145.    }
  146.  
  147.    private synchronized Class findClass(String var1) {
  148.       Class var2 = (Class)this.classes.get(var1);
  149.       if (var2 != null) {
  150.          return var2;
  151.       } else {
  152.          if (this.verboseClassLoading) {
  153.             PrintStream var10000 = System.out;
  154.             StringBuffer var10001 = new StringBuffer();
  155.             Thread var3 = Thread.currentThread();
  156.             char[] var4 = var3.name;
  157.             var10000.println(var10001.append(new String(var4)).append(" find class ").append(var1).toString());
  158.          }
  159.  
  160.          SecurityManager var15 = System.security;
  161.          if (var15 != null) {
  162.             int var16 = var1.lastIndexOf(46, var1.count - 1);
  163.             if (var16 >= 0) {
  164.                var15.checkPackageDefinition(var1.substring(0, var16));
  165.             }
  166.          }
  167.  
  168.          String var17 = var1.replace('.', '/') + ".class";
  169.  
  170.          try {
  171.             URL var5 = this.base;
  172.             String var18 = var5.handler.toExternalForm(var5);
  173.             URL var6 = new URL(var18 + var17);
  174.             if (this.verboseClassLoading) {
  175.                System.out.println("Opening stream to: " + var6 + " to get " + var1);
  176.             }
  177.  
  178.             var2 = this.loadClass(var6);
  179.             if (!var1.equals(var2.getName())) {
  180.                Class var7 = var2;
  181.                Object var14 = null;
  182.                throw new ClassFormatError(var1 + " != " + var7.getName());
  183.             }
  184.  
  185.             this.classes.put(var1, var2);
  186.          } catch (FileNotFoundException var8) {
  187.             this.errorMsg("filenotfound", var1);
  188.          } catch (ClassFormatError var9) {
  189.             this.errorMsg("fileformat", var1);
  190.          } catch (IOException var10) {
  191.             this.errorMsg("fileioexception", var1);
  192.          } catch (Exception var11) {
  193.             this.errorMsg("fileexception", ((Throwable)var11).toString(), var1);
  194.          } catch (ThreadDeath var12) {
  195.             this.errorMsg("filedeath", var1);
  196.             throw var12;
  197.          } catch (Error var13) {
  198.             this.errorMsg("fileerror", ((Throwable)var13).toString(), var1);
  199.          }
  200.  
  201.          return var2;
  202.       }
  203.    }
  204. }
  205.